package com.itheima.algorithm.heap;


/**
 * @author: TylerZhong
 * @description: 求数据流中第 K 大的元素
 */
public class E03Leetcode703 {
    private MinHeap heap;

    public E03Leetcode703(int k, int[] nums) {
        heap = new MinHeap(k);
        for (int num : nums) {
            add(num);
        }
    }

    /**
     * 此方法会被不断调用，模拟数据流中新来的元素
     * @param value
     * @return
     */
    public int add(int value) {
        if (!heap.isFull()) {
            heap.offer(value);
        } else if (value > heap.peek()) {
            heap.replace(value);
        }
        return heap.peek();
    }

    public static void main(String[] args) {
        E03Leetcode703 test = new E03Leetcode703(3, new int[]{4, 5, 8, 2});
        // 小顶堆，保留最大的3个
        System.out.println(test.add(3));
        System.out.println(test.add(5));
        System.out.println(test.add(10));
        System.out.println(test.add(9));
        System.out.println(test.add(4));
    }
}
